package com.naiterui.ehp.bs.b2c.product.service;

import java.util.List;

import com.naiterui.common.repository.page.PageVO;
import com.naiterui.ehp.bp.bo.b2c.ProductBoxBO;
import com.naiterui.ehp.bp.bo.b2c.ProductDefaultUsageBO;
import com.naiterui.ehp.bp.bo.b2c.ProductInventoryBO;
import com.naiterui.ehp.bp.bo.b2c.param.InventoryParamBO;
import com.naiterui.ehp.bp.bo.doctor.product.CategoryBO;
import com.naiterui.ehp.bp.bo.doctor.product.CueWordBO;
import com.naiterui.ehp.bp.bo.doctor.product.ProductDetailBO;
import com.naiterui.ehp.bp.bo.doctor.product.ProductInfoBO;
import com.naiterui.ehp.bp.bo.doctor.product.ProductSearchParamBO;
import com.naiterui.ehp.bs.b2c.product.exception.ProductBusinessException;

/**
 * <pre>
 *     商品相关内部业务接口
 * </pre>
 * @author gongbaoqiang
 * @date 2019/5/17 15:07
 * @since 1.0.0
 */
public interface IInnerProductService {
    /**
     * <ul>
     * <li>根据商品pid集合查询商品详细信息</li>
     * <li>ProductBoxBO结果中的skus为冗余数据，逻辑处理时以sku为外层数据返回，非一个Product包含多个SKU格式</li>
     * </ul>
     * @param skuIds
     * @return
     */
    List<ProductBoxBO> getProductList(String skuIds);

    /**
     * <ul>
     * <li>根据商品skuid集合查询商品库存信息</li>
     * <li>返回结果中对部分字段做兼容性处理</li>
     * </ul>
     * @param goodsList
     * @return
     */
    List<ProductInventoryBO> getInventoryInfoList(List<InventoryParamBO> goodsList);

    /**
     * <ul>
     * <li>根据商品skuIds集合查询商品用法用量</li>
     * <li>当前无默认用法用量配置数据，按需进行模拟构造，有实际数据时进行替换</li>
     * </ul>
     * @param skuIds
     * @return
     */
    List<ProductDefaultUsageBO> getDefaultUsage(String skuIds) throws ProductBusinessException;

    /**
     * 分页获取商品列表信息
     * @param productSearch 搜索参数
     * @return BO
     */
    PageVO<ProductInfoBO> findProductList(ProductSearchParamBO productSearch);

    /**
     * 根据skuId获取商品详情
     * @param skuId skuId
     * @return BO
     */
    ProductDetailBO getProductDetail(Long skuId) throws ProductBusinessException;

    /**
     * 获取商品名称列表
     * @param key 搜索关键字
     * @return BO
     */
    List<CueWordBO> getProductNameList(String key);

    /**
     * 获取商品分类列表
     * @return BO
     */
    List<CategoryBO> getCategory();
}
